From 992c4d6f0bee1d82b9ca160a49e163ff0fa396cb Mon Sep 17 00:00:00 2001
From: "tw275@labyrinth.cl.cam.ac.uk"
Date: Mon, 16 Aug 2004 13:04:39 +0000
Subject: [PATCH] bitkeeper revision 1.1159.32.1
(4120b0e7LRYrL1B3ICa0Qkit5txAbQ)
Added error checking, small button on domain list,
updated to be compatible with latest xend, and
some small changes to domain creation.
---
.rootkeys | 4 ++
tools/python/xen/sv/CreateDomain.py | 21 ++++++++--
tools/python/xen/sv/DomInfo.py | 61 ++++++++++++++++++++--------
tools/python/xen/sv/DomList.py | 49 +++++++++++++++-------
tools/python/xen/sv/HTMLBase.py | 2 +
tools/python/xen/sv/Main.py | 25 +++++++++++-
tools/python/xen/sv/NodeInfo.py | 15 +++++--
tools/python/xen/sv/util.py | 8 +++-
tools/sv/Makefile | 5 +++
tools/sv/images/destroy.png | Bin 0 -> 2408 bytes
tools/sv/images/small-destroy.png | Bin 0 -> 483 bytes
tools/sv/images/small-pause.png | Bin 0 -> 434 bytes
tools/sv/images/small-unpause.png | Bin 0 -> 500 bytes
tools/sv/inc/script.js | 7 ++++
14 files changed, 153 insertions(+), 44 deletions(-)
create mode 100644 tools/sv/images/destroy.png
create mode 100644 tools/sv/images/small-destroy.png
create mode 100644 tools/sv/images/small-pause.png
create mode 100644 tools/sv/images/small-unpause.png
diff --git a/.rootkeys b/.rootkeys
index 6c0a76071c..a98b088629 100644
--- a/.rootkeys
+++ b/.rootkeys
@@ -442,6 +442,7 @@
40cf2937Z8WCNOnO2FcWdubvEAF9QQ tools/python/xen/xm/shutdown.py
40fcefb2K1xqVVT4D-p7nL2GzS4scg tools/sv/Main.rpy
40ffbcb66Dj5F-1kCK9BcgSqCWkt1w tools/sv/Makefile
+4120b0e5L_nW-u0MWRfIdXg4ng4OjA tools/sv/images/destroy.png
4107c921_OR9NTSv2dKFiLCXxrXoxA tools/sv/images/finish.png
40fcefb3wXQMsl9WkgQAVtdrupm4sw tools/sv/images/left-end-highlight.jpg
40fcefb3K6ESt5sQhD9aCQRscQIlXQ tools/sv/images/left-end-no-highlight.jpg
@@ -459,6 +460,9 @@
40fcefb3dgsa24WLk_BJeYQHrDLuOg tools/sv/images/seperator-right-highlight.jpg
40fcefb3FtiX4Pd2kT8wDlp8u8xRhQ tools/sv/images/seperator.jpg
41013a82sUdUqBv8EoAUJii3gsZ-4g tools/sv/images/shutdown.png
+4120b0e5RyNoIQNMjUs4A2kshovjaQ tools/sv/images/small-destroy.png
+4120b0e6vW66wW6WvjQyFD0AZH2tng tools/sv/images/small-pause.png
+4120b0e6USof7ieyGxEvtCdTMpxaQw tools/sv/images/small-unpause.png
4104ffca-jPHLVOrW0n0VghEXXtKxg tools/sv/images/unpause.png
40fcefb3yMSrZvApO9ToIi-iQwnchA tools/sv/images/xen.png
41013a83z27rKvWIxAfUBMVZ1eDCDg tools/sv/inc/script.js
diff --git a/tools/python/xen/sv/CreateDomain.py b/tools/python/xen/sv/CreateDomain.py
index b4fd52f0e8..77237a3a47 100644
--- a/tools/python/xen/sv/CreateDomain.py
+++ b/tools/python/xen/sv/CreateDomain.py
@@ -25,6 +25,7 @@ class CreatePage0( Sheet ):
self.addControl( InputControl( 'name', 'VM Name', 'VM Name:', "[\\w|\\S]+", "You must enter a name in this field" ) )
self.addControl( InputControl( 'memory', '64', 'Memory (Mb):', "[\\d]+", "You must enter a number in this field" ) )
self.addControl( InputControl( 'cpu', '0', 'CPU:', "[\\d]+", "You must enter a number in this feild" ) )
+ self.addControl( InputControl( 'cpu_weight', '1', 'CPU Weight:', "[\\d]+", "You must enter a number in this feild" ) )
class CreatePage1( Sheet ):
@@ -83,9 +84,16 @@ class CreateFinish( Sheet ):
xend_sxp = self.translate_sxp( string2sxp( self.passback ) )
- dom_sxp = server.xend_domain_create( xend_sxp )
+ try:
+ dom_sxp = server.xend_domain_create( xend_sxp )
+ success = "Your domain was successfully created.\n"
+ except:
+ success = "There was an error creating your domain.\nThe configuration used is as follows:\n"
+ dom_sxp = xend_sxp
+
+
- pt = PreTab( sxp2prettystring( dom_sxp ) )
+ pt = PreTab( success + sxp2prettystring( dom_sxp ) )
pt.write_BODY( request )
request.write( "
" % self.passback )
@@ -106,6 +114,7 @@ class CreateFinish( Sheet ):
vals.name = get( 'name' )
vals.memory = get( 'memory' )
vals.cpu = get( 'cpu' )
+ vals.cpu_weight = get( 'cpu_weight' )
vals.builder = get( 'builder' )
vals.kernel = get( 'kernel' )
@@ -121,7 +130,7 @@ class CreateFinish( Sheet ):
vals.disk = vbds
- #misc crap
+ #misc
vals.pci = []
@@ -145,4 +154,8 @@ class CreateFinish( Sheet ):
vals.cmdline_ip = "%s:%s:%s:%s:%s:eth0:%s" % (ip, nfs, gate, mask, host, dhcp)
- return make_config( vals )
+ try:
+ return make_config( vals )
+ except:
+ return [["Error creating domain config."]]
+
diff --git a/tools/python/xen/sv/DomInfo.py b/tools/python/xen/sv/DomInfo.py
index 6f8ac1ab5b..3e4fb70b13 100755
--- a/tools/python/xen/sv/DomInfo.py
+++ b/tools/python/xen/sv/DomInfo.py
@@ -5,6 +5,8 @@ from xen.sv.HTMLBase import HTMLBase
from xen.sv.util import *
from xen.sv.GenTabbed import *
+DEBUG=1
+
class DomInfo( GenTabbed ):
def __init__( self, urlWriter ):
@@ -76,8 +78,11 @@ class DomSXPTab( PreTab ):
request.write( "Please Select a Domain
" )
return None
- domInfo = server.xend_domain( self.dom )
-
+ try:
+ domInfo = server.xend_domain( self.dom )
+ except:
+ domInfo = [["Error getting domain details."]]
+
self.source = sxp2prettystring( domInfo )
PreTab.write_BODY( self, request )
@@ -88,32 +93,54 @@ class DomActionTab( ActionTab ):
actions = { "shutdown" : ( "Shutdown the Domain", "shutdown.png" ),
"reboot" : ( "Reboot the Domain", "reboot.png" ),
"pause" : ( "Pause the Domain", "pause.png" ),
- "unpause" : ( "Unpause the Domain", "unpause.png" ) }
+ "unpause" : ( "Unpause the Domain", "unpause.png" ),
+ "destroy" : ( "Destroy the Domain", "destroy.png" ) }
ActionTab.__init__( self, actions )
def op_shutdown( self, request ):
dom = getVar( 'dom', request )
- if not dom is None:
- print ">DomShutDown %s" % dom
- #server.xend_node_shutdown()
+ if not dom is None and dom != '0':
+ if DEBUG: print ">DomShutDown %s" % dom
+ try:
+ server.xend_domain_shutdown( int( dom ), "halt" )
+ except:
+ pass
def op_reboot( self, request ):
dom = getVar( 'dom', request )
- if not dom is None:
- print ">DomReboot %s" % dom
- #server.xend_node_reboot()
-
+ if not dom is None and dom != '0':
+ if DEBUG: print ">DomReboot %s" % dom
+ try:
+ server.xend_domain_shutdown( int( dom ), "reboot" )
+ except:
+ pass
+
def op_pause( self, request ):
dom = getVar( 'dom', request )
- if not dom is None:
- print ">DomPause %s" % dom
- server.xend_domain_pause( int( dom ) )
-
+ if not dom is None and dom != '0':
+ if DEBUG: print ">DomPause %s" % dom
+ try:
+ server.xend_domain_pause( int( dom ) )
+ except:
+ pass
+
def op_unpause( self, request ):
dom = getVar( 'dom', request )
- if not dom is None:
- print ">DomUnpause %s" % dom
- server.xend_domain_unpause( int( dom ) )
+ if not dom is None and dom != '0':
+ if DEBUG: print ">DomUnpause %s" % dom
+ try:
+ server.xend_domain_unpause( int( dom ) )
+ except:
+ pass
+
+ def op_destroy( self, request ):
+ dom = getVar( 'dom', request )
+ if not dom is None and dom != '0':
+ if DEBUG: print ">DomDestroy %s" % dom
+ try:
+ server.xend_domain_destroy( int( dom ), "halt" )
+ except:
+ pass
diff --git a/tools/python/xen/sv/DomList.py b/tools/python/xen/sv/DomList.py
index faed020b05..d6e123143e 100755
--- a/tools/python/xen/sv/DomList.py
+++ b/tools/python/xen/sv/DomList.py
@@ -17,9 +17,14 @@ class DomList( HTMLBase ):
def write_BODY( self, request, head=True, long=True ):
- domains = map(int, server.xend_domains())
- domains.sort()
+ domains = None
+ try:
+ domains = server.xend_domains()
+ domains.sort()
+ except:
+ pass
+
request.write( "\n\n" )
if head:
@@ -29,28 +34,42 @@ class DomList( HTMLBase ):
odd = True
- for domain in domains:
- if odd:
- request.write( "\n" )
- odd = False
- else:
- request.write( "
\n" )
- odd = True
- self.write_DOMAIN( request, getDomInfoHash( domain ), long )
- request.write( "
\n" )
-
+ if not domains is None:
+ for domain in domains:
+ if odd:
+ request.write( "\n" )
+ odd = False
+ else:
+ request.write( "
\n" )
+ odd = True
+ self.write_DOMAIN( request, getDomInfoHash( domain ), long )
+ request.write( "
\n" )
+ else:
+ request.write( "Error getting domain list
Perhaps XenD not running?
")
+
request.write( "
\n" )
def write_DOMAIN( self, request, domInfoHash, long=True ):
- request.write( "%(dom)-4d | \n" % domInfoHash )
+ request.write( "%(id)s | \n" % domInfoHash )
- url = self.urlWriter( "&mod=info&dom=%(dom)-4d" % domInfoHash )
+ url = self.urlWriter( "&mod=info&dom=%(id)s" % domInfoHash )
request.write( "%s | \n" % ( url, domInfoHash['name'] ) )
if long:
request.write( "%(memory)5s | \n" % domInfoHash )
request.write( "%(cpu)2s | \n" % domInfoHash )
request.write( "%(state)5s | \n" % domInfoHash )
+ if domInfoHash[ 'id' ] != "0":
+ request.write( "" )
+
+ if domInfoHash[ 'state' ][ 2 ] == "-":
+ request.write( " " % domInfoHash )
+ else:
+ request.write( " " % domInfoHash )
+
+ request.write( " | " % domInfoHash)
+ else:
+ request.write( " | " )
def write_DOMAIN_HEAD( self, request, long=True ):
request.write( "Domain | \n" )
@@ -59,4 +78,4 @@ class DomList( HTMLBase ):
request.write( "Memory / Mb | \n" )
request.write( "CPU | \n" )
request.write( "State | \n" )
-
+ request.write( " | \n" )
diff --git a/tools/python/xen/sv/HTMLBase.py b/tools/python/xen/sv/HTMLBase.py
index 10d860e0c4..e67784d558 100755
--- a/tools/python/xen/sv/HTMLBase.py
+++ b/tools/python/xen/sv/HTMLBase.py
@@ -1,4 +1,5 @@
from twisted.web.resource import Resource
+from xen.sv.util import *
class HTMLBase( Resource ):
@@ -28,6 +29,7 @@ class HTMLBase( Resource ):
def write_BOTTOM( self, request ):
request.write('')
+ request.write('')
request.write('')
request.write( "